package com.zykj.java8.lambda;

import com.zykj.spb.study.entity.evaluate.Evaluate;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Title: LambdaDemo
 * @Project: ${MODEL_NAME}
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 22
 * @since 2018/12/21-14:22
 */
public class LambdaDemo {
    public static void main(String[] args) throws InterruptedException {

        System.out.println("主线程名称：" + Thread.currentThread().getName());
        // 使用 lambda 启动一个线程
        new Thread(() -> System.out.printf("当前线程名称：%s", Thread.currentThread().getName())).start();

        Thread.sleep(20L);
        System.out.println();

        List<Evaluate> evaluateList = new ArrayList<Evaluate>();
        Evaluate e1 = new Evaluate();
        e1.setWorkName("E1");
        Evaluate e2 = new Evaluate();
        e2.setWorkName("E2");
        Evaluate e3 = new Evaluate();
        e3.setWorkName("E3");
        Evaluate e4 = new Evaluate();
        e4.setWorkName("E4");

        evaluateList.add(e1);
        evaluateList.add(e2);
        evaluateList.add(e3);
        evaluateList.add(e4);

        //对集合的循环
        //TODO 这种：： 操作符就是对方法的引用
        evaluateList.stream().forEach(LambdaDemo::accept);


        // 测试如果   List 是空的    stream 迭代是否有影响
        System.out.println("================测试空List 使用stream的影响");
        List nullList = new ArrayList();
        nullList.stream().forEach(o -> {
            System.out.println(o);
        });
        for (Object o : nullList) {
            System.out.println(o);
        }

        //如果是一个字符集合  可以直接用 方法引用输出
        List<String> strList = Arrays.asList("java", "C", "C++", "Python");
        strList.stream().forEach(System.out::println);
    }

    private static void accept(Evaluate evaluate) {
        System.out.println(evaluate.getWorkName());
    }
}
